/**
 * @author nullus
 */


function adjustPageHeightOnResize () {
	//TODO ひどいコードなので、意図を明確にして書き直すべし
	
	//高さ調節
	//右メインパネル
	container_height = document.getElementById('container').clientHeight;
	upper_height = document.getElementById('upper').clientHeight;
	lower_height = document.getElementById('lower').style.height = container_height - upper_height;
	center_panel_height = document.getElementById('center-panel').style.height = lower_height;
	center_panel_header_height = document.getElementById('center-panel-header').clientHeight;
	task_box_list_margin_top = 10;
	task_box_list_height = document.getElementById('task-box-list').style.height = center_panel_height - center_panel_header_height - task_box_list_margin_top;

	left_panel_height = document.getElementById('left-panel').style.height = lower_height;
	
	//左パネル
	tagtree_height = document.getElementById('tagTree').style.height = 
						lower_height - document.getElementById('calendarContainer').clientHeight;
						
}

/*
 * logout.rhtmlにポストするためのメソッド
 */
function doPostToLogout () {
	document.getElementById('logout-ancher').submit();
}

/*
 * add_task.rhtmlにポストするためのメソッド
 */
function doPostToAddTask () {
	document.getElementById('add-task').submit();
}

/*
 * remove_task.rhtmlにポストするためのメソッド
 */
function doPostToRemoveTask (index) {
	// このメソッドはタスク内のリンク実行時に呼ばれるので、lengthが0以下になることはない
	if (document.remove_anchor.length > 1) { //memo:タスクが1つの場合は、以下の呼び方をするとFormの下のinputを取得するのでsubmit()でエラーになる
		document.remove_anchor[index].submit();
	} else {
		document.remove_anchor.submit();	
	}
}

/**
 * ユーザーの入力値をチェックするメソッド
 */
function checkInputs (index) {
	//入力値が1つでも不正な場合はMSGを表示してPOSTしない
	result = true;
	
	//締め日の日付チェック
	result = validateInputsAsDateTime(index);
	
	return result;
}

/**
 * 入力値をDateTime型としてチェックするメソッド<br/>
 * 入力値が不正な場合はメッセージを表示して<code>false</code>を返す。
 *　TODO: 2/31や閏年のチェックなど
 * @param {Object} index チェックするフォームのIndex
 * @return 入力値が正しければ<code>true</code>
 */
function validateInputsAsDateTime (index) {
	task_form = document.task_form[index];
	due_year = parseInt(task_form.due_year.value);
	due_month = parseInt(task_form.due_month.value); 
	due_day = parseInt(task_form.due_day.value);
	due_hour = parseInt(task_form.due_hour.value);
	due_minute = parseInt(task_form.due_minute.value);
	due_second = parseInt(task_form.due_second.value);

	//年が不正
	if (!validateInput(due_year, "number", 1753, 9999)){
		alert("締め日時の年の値が不正です。\n1753から9999の数字を指定してください");
		return false;		
	}
	
	//月が不正
	if (!validateInput(due_month, "number", 1, 12)){
		alert('締め日時の月の値が不正です。\n1から12の数字を指定してください');
		return false;
	}
	
	//日が不正
	if (!validateInput(due_day, "number", 1, 31)){
		alert('締め日時の日の値が不正です。\n1から31の数字を指定してください');
		return false;
	}

	//時が不正
	if (!validateInput(due_hour, "number", 0, 23)){
		alert('締め日時の時の値が不正です。\n0から23の数字を指定してください');
		return false;
	}

	//分が不正
	if (!validateInput(due_minute, "number", 0, 59)){
		alert('締め日時の分の値が不正です。\n0から59の数字を指定してください');
		return false;
	}

	//秒が不正
	if (!validateInput(due_second, "number", 0, 59)){
		alert('締め日時の秒の値が不正です。\n0から59の数字を指定してください');
		return false;
	}

	return true;
}

/**
 * 入力された値が指定された型であり、指定された範囲内であるかをチェックする関数<br/>
 * 入力値が正しい場合は<code>true</code>、不正な場合は<code>false</code>を返す。<br/>
 * 型の指定は<code>type</code>属性に以下の文字列で指定。
 * <ul>
 * 	<li>数値："number"</li>
 * </ul>
 * @param (Object) input 入力された値
 * @param {String} type 指定する型(今のところ数字型しかチェックできない)。文字列で指定
 * @param {Object} from　値の下限
 * @param {Object} to 値の上限
 */
function validateInput (input, type, from, to) {
	if ("number" == type) { //数値でチェックする
		if (isNaN(input))
		 return false;
		if (input < from || input > to)
		 return false;
		 
		 //チェックOK
		 return true;
	}
	return false;
}